【雑記】その33 Pythonで作ったゲームをRenderでデプロイする方法【備忘録】
第33回です
文化祭で出すゲームをデプロイするのに非常に手間取っため、方法を備忘録として遺しておきます
とりあえずVSCode、pip、Gitをインストールしてあり、Githubのアカウントを持っている前提で進めます
あとコピペしたらちゃんと保存しましょうね
1.作る
Pythonでちゃちゃっと作っちゃいましょう
ネタは鮮度が命です
2.venvの導入
venvは手軽に仮想環境を作成・管理することができるツールです
Python3.3以降ではデフォルトで入ってるらしいです
初回は仮想環境の作成が必要です
VSCでプロジェクトのフォルダーを開き、表示→ターミナルでターミナルを開き、
$ python -m venv venv
を実行します
2つ目のvenvは仮想環境名なので何でもいいですが、特に差し支えなければvenvでいいでしょう
直下にvenvというフォルダーができていれば成功です
次に仮想環境をアクティベートします
$ .\venv\Scripts\activate
https://gyazo.com/6c07a25d8c90620a98f86010a32c315e
こんな感じになれば成功です
3.pipenvの導入
ここから依存関係が複雑になってくるので、pipenvをインストールしましょう(自戒)
$ pip install pipenv
ついでに更新もしておきます
$ pipenv update
4.requirements.txt
直下にrequirements.txtというファイルを作ります
中身は下のをコピペし、必要であれば追加していきましょう
code:requirements.txt
black
blinker
certifi
click
colorama
colorlog
contourpy
cycler
dacite
dill
distlib
filelock
flake8
Flask
fonttools
gitdb
GitPython
isort
itsdangerous
Jinja2
kiwisolver
MarkupSafe
matplotlib
mccabe
mpmath
mypy
mypy-extensions
numpy
packaging
pandas
pathspec
pbr
pillow
pipenv
platformdirs
pycodestyle
pydot
pyflakes
pylatexenc
pyparsing
pysen
python-dateutil
pytz
qiskit
rustworkx
scipy
seaborn
setuptools
six
smmap
stevedore
symengine
sympy
tomlkit
typed_ast
typing_extensions
tzdata
unidiff
virtualenv
Werkzeug
venvの仮想環境で
$ pipenv install -r requirements.txt
を実行します
ちなみにこの状態でvenvで
$ pip freeze > requirements.txt
を実行すると、上のやつの末尾に"==(バージョン)"が追加されます
予期せぬエラーが発生したときに調べたりとかできるのでやっておいた方がいいと思います
古いと依存関係の影響でエラー吐きがちですが、そこをpipenvに何とかしてもらおうという感じです
pipenvくん優秀!
venvは
$ deactivate
しちゃって大丈夫です
5.pysenの設定
直下にpyproject.tomlというファイルを作成します
code:pyproject.toml
version = "0.11"
enable_black = true
enable_flake8 = true
enable_isort = true
enable_mypy = true
mypy_preset = "strict"
line_length = 88
py_version = "py38"
tool.pysen.lint.mypy_targets
paths = "tests/"
preset = "entry"
ignore_errors = true
line-length = 88
default_section = "THIRDPARTY"
ensure_newline_before_comments = true
force_grid_wrap = 0
force_single_line = false
include_trailing_comma = true
line_length = 88
multi_line_output = 3
use_parentheses = true
上のをコピペしておきましょう
余談ですが、このpysenのセットアップが一番面倒でした
依存関係がだるくて、requirements.txtとか何回編集したかわかりません
pyproject.tomlも色々だるかったです
6.gitignore
venvとかを無視します
.gitignoreというファイル名はメモ帳では作れないのでVSC等で作りましょう
出てきたやつらをコピペするだけでできちゃいます
必要があれば編集しましょう
7.Githubにアップロード
GithubのマイページからRepositoriesを開き、Newをクリックします
Repository nameは適当でいいです
分かりやすいやつにしときましょう
下の方のCreate repositoryをクリックしたら、空のリポジトリが完成します
https://gyazo.com/96579d69d930e8ffb8aaaf9858ac92c9
ここの~~.gitのURLを控えておきましょう
ターミナルからリポジトリを初期化し、インデックスに登録します
$ git init
$ git add .
ここで先程のpysenを使います
$ pysen generate .
$ pysen run lint
$ pysen run format
これでエラーとかが修復できるらしいです(苦労した割によくわかってない)
コミットしましょう
$ git commit -m "first commit"
ちなみにこのfirst commitの部分は何でもいいです
さっき作った空のリポジトリを登録します
そしてアップロードです
$ git push -u origin master
https://gyazo.com/075c21b707a755c349abde5811783b62
できましたね
ちなみにファイルを更新したいときは
$ git init
$ git add .
$ pysen generate .
$ pysen run lint
$ pysen run format
$ git commit -m "(更新日の日付とか)"
$ git push
でできます
変更後にpysenやっとくとエラーが起こりづらくなるので、ちょっと面倒ですがやっておいた方がいいと思います
8.Renderへのデプロイ
+New→Web Service
https://gyazo.com/74bd4072390d2860236ae5baebe6d858
さっきのリポジトリを選択してConnect→
https://gyazo.com/239e19483d7390c94608d81b8d42f892
RegionはよくわからないのでSingaporeでいいでしょう
Build Commandは
$ pipenv install -r requirements.txt
に変えといた方がいいと思います
Start Commandは謎です
先人が
$ export FLASK_APP=main.py && flask run -h 0.0.0.0 -p 10000
と入れていたので真似しときます
(補足:今回私のゲームはFlaskというフレームワークを使ったのでこのコマンドです。使用したものでググるのがいいでしょう)
https://gyazo.com/b6ed00ddcf05332d3e6224a539eef000
Instance TypeはFreeにしておきましょう
最後に下のDeploy Web Serviceを押します
5分くらいして"Your service is live 🎉"と表示されれば完成です
左上のURLからページに遷移できます
9.おまけ
Renderは無料プランだと15分間の無操作によってスリープ状態に移行するようです
弊校のような過疎文化祭の弊部のような過疎部活に出すようなゲームなんて余裕でスリープの連続が発生することが予想されるので、対策をしておきます
以上、Renderを用いたデプロイの仕方でした
最初の失敗から成功まで8時間かかってます
来週の文化祭終了後完成品を載せると思います
ではまた